package fr.miage.course7.app;

import java.util.ArrayList;
import java.util.Collection;

import fr.miage.course7.app.controller.Controller;
import fr.miage.course7.app.model.Course;
import fr.miage.course7.app.model.Participant;
import fr.miage.course7.app.model.Position;
import fr.miage.course7.app.workdata.Client;

/**
 * Application cliente course 7.
 *
 */
public class App {

    /**
     * Course (conteneur du modele).
     * Elle contient notamment la liste des participants.
     */
    private static Course course;

    /**
     * Client pour la communication avec le serveur.
     */
    private static Client client;

    /**
     * Controller qui crée la fenêtre, donc la vue.
     */
    private static Controller controller;

    /**
     * Fonction principale.
     * @param args Arguments du programme
     */
    public static void main(final String[] args) {
        //Definition du modele
        course = new Course();

        //Connexion au serveur
        client = new Client();

        //Le client s'occupe de toutes les mises a jour

        //Initialisation de la vue apres la mise a jour du modele
        controller = new Controller(course);
        controller.displayView();
    }

    /**
     * Retourne le client.
     * @return le client
     */
    public static Client getClient() {
        return client;
    }

    /**
     * Defini la liste des participants.
     * @param liste la liste des participants
     */
    public static void setListeParticipants(
                               final Collection<Participant> liste) {
        course.getParticipants().clear();
        for (Participant p : liste) {
            course.getParticipants().put(p.getIdentifiant(), p);
        }
    }

    /**
     * Defini la liste des etapes obligatoires.
     * @param liste la liste des etapes obligatoires
     */
    public static void setListeEtapes(final ArrayList<Position> liste) {
        course.setEtapes(liste);
    }

    /**
     * Defini la liste des etapes de l'itineraire propose.
     * @param liste la liste des etapes de l'itineraire propose
     */
    public static void setItineraire(final ArrayList<Position> liste) {
        course.setItineraire(liste);
    }

    /**
     * Quitte le programme.
     */
    public static void exit() {
        controller.closeView();
    }

    /**
     * Retourne le participant a partir de son id.
     * @param id identifiant du participant
     * @return le participant a partir de son id
     */
    public static Participant getParticipant(final int id) {
        return course.getParticipants().get(id);
    }

    /**
     * Retourne la course.
     * @return la course
     */
    public static Course getCourse() {
        return course;
    }

    /**
     * Met a jour la vue.
     */
    public static void updateView() {
//    	controller.getFenetre().rafraichir();
    }
}
